iT邦幫忙

2024 iThome 鐵人賽

DAY 7
1
自我挑戰組

從零開始的Python到Django應用開發系列 第 7

Day 07. 最常用的Google表單結合python

  • 分享至 

  • xImage
  •  

Dear All:

在這年頭表單領頭羊肯定就是google表單,但是問卷調查後想要抓取google表單內的資料是什麼時,除了自行登入查看表單結果!但是我們怎麼不直接抓取資料到我們系統後台呢?我們就來Do it。


Google 表單讀取回應並在後台顯示出來

船長們可以使用 Google Sheets API,因為 Google 表單的回應會儲存在 Google Sheets 中。
以下是具體步驟與 Python 程式碼範例,展示如何讀取表單回應並在後台顯示:

步驟 1:啟用 Google Sheets API 並下載憑證

前往 Google Cloud Console 並啟用 Google Sheets API。
創建憑證(OAuth 2.0 Client IDs),下載 credentials.json,用於後續的 API 認證。

步驟 2:安裝必要的 Python 套件

你需要安裝 Google 提供的官方函式庫來處理 API 認證和互動。執行以下命令來安裝套件:

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

步驟 3:編寫 Python 程式來讀取 Google 表單回應

這個範例會讀取 Google 表單對應的 Google Sheets 內容,並將回應資料顯示在後台(即命令行或終端機)中。

import os.path
import pickle
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build

# 如果只需要讀取,使用只讀範圍
SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']

# 替換成你的 Google Sheets 試算表 ID
SPREADSHEET_ID = 'your_spreadsheet_id_here'  
# 通常表單回應會儲存在 "表單回應 1" 的範圍
RANGE_NAME = 'Form Responses 1'  

def main():
    creds = None
    # 檢查是否有保存的 token
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    # 如果沒有 token 或已過期,重新登入
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # 保存 token 以便下次使用
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    # 連接 Google Sheets API
    service = build('sheets', 'v4', credentials=creds)

    # 讀取表單回應
    sheet = service.spreadsheets()
    result = sheet.values().get(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME).execute()
    values = result.get('values', [])

    if not values:
        print('No data found.')
    else:
        print('Form Responses:')
        for row in values:
            # 每一行表示一個回應
            print(row)

if __name__ == '__main__':
    main()

步驟 4:運行 Python 程式

1.把下載的 credentials.json 文件放在與程式碼相同的目錄中。
2.用你的 Google Sheets ID 替換 SPREADSHEET_ID。試算表的 ID 是 Google Sheets 網址中的一部分。例如:

https://docs.google.com/spreadsheets/d/1wPQA1234567abcdeFGH2J6gfGHI789kL0/edit#gid=0

3.你可以在命令行運行這段程式碼,第一次運行會要求你登入並授權 Google Sheets API。

python your_script.py

授權完成後,Google 表單中的回應將會顯示在終端機中,每個回應都是一行。

結果範例
假設你的 Google 表單有 3 個問題:

名字
年齡
喜歡的顏色
那麼程式運行後的輸出會類似這樣:

Form Responses:
['Timestamp', 'Name', 'Age', 'Favorite Color']
['2024/09/17 12:34:56', 'Alice', '30', 'Blue']
['2024/09/17 13:45:01', 'Bob', '25', 'Green']
['2024/09/17 14:56:23', 'Charlie', '22', 'Red']

每一行代表一個表單回應,包含提交時間和對應的回答。


我們後續會將此技能加入到我們專案中!大家可以在自己本機上操作看看喔。
今天就先打完收工!

進度更新表:
https://ithelp.ithome.com.tw/upload/images/20240921/20115294wNRrtbPLzv.png


上一篇
Day 06. [Miscellaneous Information 整理]~~超Py~~
下一篇
Day 8. Coding Practice 你應該要有的Py能力
系列文
從零開始的Python到Django應用開發10
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言